package com.example.controller.codeTool;

import com.example.entity.RestBean;
import com.example.entity.dto.CodeTool.CodeTool;
import com.example.entity.vo.request.code.MD5RequestVO;
import com.example.entity.vo.request.code.NumberChangeRequestVO;
import com.example.entity.vo.response.code.MD5ResponseVO;
import com.example.service.CodeToolService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 编程工具控制器
 *
 * @auth shanyue
 * @date 2025年07月08日13:56
 */
@RestController
@RequestMapping("/api/codeTool")
public class CodeToolController {

    @Resource
    private CodeToolService codeToolService;

    /**
     * 获取所有代码工具列表
     *
     * @return RestBean封装的CodeTool列表对象
     */
    @GetMapping("/getCodeToolList")
    public RestBean<List<CodeTool>> getCodeToolList() {
        List<CodeTool> list = codeToolService.list();
        return RestBean.success(list);
    }

    /**
     * 根据工具路径标识获取对应的工具信息
     *
     * @param path 工具路径的唯一标识
     * @return RestBean封装的CodeTool信息，找不到返回404
     */
    @GetMapping("/getInfo")
    public RestBean<CodeTool> getCodeToolInfo(@RequestParam("path") String path) {
        CodeTool tool = codeToolService.getInfoByPath(path);
        if (tool != null) {
            return RestBean.success(tool);
        } else {
            return RestBean.failure(404, "找不到对应工具信息");
        }
    }

    /**
     * 根据请求体中的文本，返回对应的MD5哈希结果
     *
     * @param md5RequestVO 请求体，包含待加密的文本
     * @return 使用RestBean封装的MD5VO结果对象，包含32位和16位大小写的MD5字符串
     */
    @PostMapping("/md5-hash")
    public RestBean<MD5ResponseVO> md5Hash(@RequestBody MD5RequestVO md5RequestVO) {
        MD5ResponseVO result = codeToolService.getMd5Hash(md5RequestVO);
        return RestBean.success(result);
    }

    /**
     * 进制转换接口，根据源进制、目标进制及输入内容，返回转换后的结果
     *
     * @param requestVO 请求体，包含源进制(sourceBase)、目标进制(targetBase)、输入内容(inputValue)
     * @return RestBean封装的转换结果字符串，失败返回错误信息
     */
    @PostMapping("/number-change")
    public RestBean<String> numberChange(@RequestBody NumberChangeRequestVO requestVO) {
        try {
            String result = codeToolService.numberChange(requestVO.getSourceBase(), requestVO.getTargetBase(), requestVO.getInputValue());
            return RestBean.success(result);
        } catch (Exception e) {
            return RestBean.failure(400, "进制转换失败" + e.getMessage());
        }

    }

}
